www.gusucode.com > OpenGL 计算机图形学 Beizer Curve > OpenGL 计算机图形学 Beizer Curve/BEZIER曲线/Main.cpp
#include <afxwin.h> #include "Bezier.h" // Added by ClassView class CMyWindow:public CFrameWnd { afx_msg void OnPaint(); afx_msg void OnLButtonDown(UINT nFlags, CPoint point); afx_msg void OnLButtonUp(UINT nFlags, CPoint point); afx_msg void OnMouseMove(UINT nFlags, CPoint point); DECLARE_MESSAGE_MAP() private: int nMove; BOOL bBezierMove; CBezier m_Bezier; CPoint OldPos; public: CMyWindow(); }; CMyWindow::CMyWindow() { nMove=-1; bBezierMove=FALSE; } BEGIN_MESSAGE_MAP(CMyWindow,CFrameWnd) ON_WM_PAINT() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_MOUSEMOVE() END_MESSAGE_MAP() void CMyWindow::OnMouseMove(UINT nFlags, CPoint point) { static CPoint start; if(nMove!=-1) { m_Bezier.m_Point[nMove]=point; Invalidate(); } else if(bBezierMove) { m_Bezier.Move(point.x-OldPos.x,point.y-OldPos.y); OldPos=point; Invalidate(); } } void CMyWindow::OnLButtonDown(UINT nFlags, CPoint point) { UINT i; CRect rec; int RecWidth=5; for(i=0;i<m_Bezier.m_nPoint;i++) { rec.left=m_Bezier.m_Point[i].x-RecWidth; rec.top=m_Bezier.m_Point[i].y-RecWidth; rec.right=m_Bezier.m_Point[i].x+RecWidth; rec.bottom=m_Bezier.m_Point[i].y+RecWidth; if(PtInRect(&rec,point) ) { nMove=i; break; } else { nMove=-1; if(m_Bezier.PtInBezier(point)) { bBezierMove=TRUE; OldPos=point; } else bBezierMove=FALSE; } } } void CMyWindow::OnLButtonUp(UINT nFlags, CPoint point) { nMove=-1; bBezierMove=FALSE; } void CMyWindow::OnPaint() { CPaintDC dc(this); m_Bezier.Draw(&dc); } class CMyApp:public CWinApp { BOOL InitInstance(); }; BOOL CMyApp::InitInstance() { CMyWindow *wnd=new CMyWindow(); wnd->Create(0,"Draw Bezier Line,点击控制点或曲线可以拖动",WS_OVERLAPPEDWINDOW ); //wnd->ShowWindow(m_nCmdShow); wnd->ShowWindow(SW_SHOWMAXIMIZED); m_pMainWnd=wnd; return TRUE; } CMyApp theApp;